﻿using System;
using System.Diagnostics;
using System.Windows.Forms;
using Bonesoft.Forms.Sistema;
using Bonesoft.Lists.Contabil;
using Bonesoft.Lists.Estoque;
using Bonesoft.Lists.Fiscal;
using Bonesoft.Lists.Sistema;
using Bonesoft.Lists.Sped;
using Bonesoft.Lists.Vendas;
using Business;
using Business.Enum;
using Business.Forms;
using Business.NotaDaGente.Form;
using DevExpress.LookAndFeel;
using DevExpress.XtraBars;
using DevExpress.XtraEditors;
using DevExpress.XtraReports.UI;
using Relatorios.Contabil.Lancamento.Subclass;
using Relatorios.Contabil.Titulo.TituloAPagar;
using Relatorios.Contabil.Titulo.Titulos;
using Relatorios.Contabil.Titulo.TitulosAReceber;
using Relatorios.Fiscal.NotasFiscais.NotaFiscalEntrada.SubClass;
using Relatorios.Vendas.Pedidos.Detalhados.SubClass;
using Relatorios.Vendas.Pedidos.Resumidos.SubClass;

namespace Bonesoft
{
    public partial class InicialErp : DevExpress.XtraEditors.XtraForm
    {
        public InicialErp()
        {
            InitializeComponent();
            new FormLogin().ShowDialog();
            if (!Utils.Terminal.RetaguardaAtivo)
            {
                MessageBox.Show("Este terminal não está habilitado para funcionar com o " +
                                "módulo de retaguarda.");
                Process.GetCurrentProcess().Kill();
            }
            
            if (!Utils.UsuarioAtual.UsaRetaguarda)
            {
                MessageBox.Show("Este usuário não tem permissão para acessar este módulo do sistema.");
                Process.GetCurrentProcess().Kill();
            }
            DevExpress.XtraBars.Helpers.SkinHelper.InitSkinGallery(rbgiSkins, true);
            try
            {
                ConfiguraTela();

            }
            catch (Exception)
            {
                MessageBox.Show("Não foi possível configurar a tela.\n" +
                                "Verifique a configuração do banco de dados.");
            }

            nomeUsuarioBarEditItem.Description = Utils.UsuarioAtual.Pessoa.Nome;
            nomeUsuarioBarEditItem.EditValue = Utils.UsuarioAtual.Pessoa.Nome;
        }

        private void ConfiguraTela()
        {
            var u = Utils.UsuarioAtual;
            if (u.TipoUsuario == TipoUsuario.SuperAdministrador)
            {
                cmdFuncoesAdministrativas.Visibility = BarItemVisibility.Always;
                cmdConfiguracao.Visibility = BarItemVisibility.Always;
            }
        }

        private void AbreTela(XtraForm form)
        {

            form.MdiParent = this;
            form.Show();
            loadSplashManager.CloseWaitForm();
        }

        private void AbreRelatorio(XtraReport rel)
        {
            //ReportPreview.Preview(rel,this);

            rel.ShowPreviewDialog();
        }
        #region Eventos do formulário.

        private void Inicial_FormClosing(object sender, System.Windows.Forms.FormClosingEventArgs e)
        {
            if (!Utils.SolicitaBackup())
            {
                return;
            }
            var result = MessageBox.Show("Deseja fazer backup do sistema?", "Atenção", MessageBoxButtons.YesNo);
            if (result == DialogResult.Yes)
            {
                BackupSistema();

            }
        }
        private void cmdBackup_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            BackupSistema();
        }
        private void cmdSair_ItemClick(object sender, ItemClickEventArgs e)
        {
            Close();
        }
        #endregion
        #region Eventos de abertura de tela
        private void cmdFormTituloAReceber_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            loadSplashManager.ShowWaitForm();
            AbreTela(new ListTituloAReceber());
        }

        private void cmdTipoTitulo_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {

        }

        private void barButtonItem2_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            loadSplashManager.ShowWaitForm();
            AbreTela(new ListTituloAPagar());
        }

        private void cmdCliente_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            loadSplashManager.ShowWaitForm();
            AbreTela(new ListCliente());
        }

        private void cmdLancamento_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            loadSplashManager.ShowWaitForm();
            AbreTela(new ListLancamento());
        }

        private void cmdConfig_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {

        }

        private void cmdFornecedor_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            loadSplashManager.ShowWaitForm();
            AbreTela(new ListFornecedor());
        }



        private void cmdProduto_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            loadSplashManager.ShowWaitForm();
            AbreTela(new ListProduto());
        }

        private void cmdGrupoProduto_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            loadSplashManager.ShowWaitForm();
            AbreTela(new ListGrupoProduto());
        }

        private void cmdSubGrupoProduto_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            loadSplashManager.ShowWaitForm();
            AbreTela(new ListSubGrupoProduto());
        }

        private void cmdCustosFixos_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            loadSplashManager.ShowWaitForm();
            AbreTela(new ListCustosFixos());
        }


        private void cmdTipoLancamento_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            loadSplashManager.ShowWaitForm();
            AbreTela(new ListTipoLancamento());
        }

        private void cmdRelTituloAPagaPorTipo_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {

        }

        private void cmdCadTransferencias_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            loadSplashManager.ShowWaitForm();
            AbreTela(new ListTransferencia());
        }

        private void rbgiSkins_GalleryItemClick(object sender, DevExpress.XtraBars.Ribbon.GalleryItemClickEventArgs e)
        {

            DevExpress.LookAndFeel.UserLookAndFeel.Default.StyleChanged += DefaultOnStyleChanged;

        }

        private void DefaultOnStyleChanged(object sender, EventArgs eventArgs)
        {
            Properties.Settings.Default.SkinName = UserLookAndFeel.Default.SkinName;
            Properties.Settings.Default.Save();
        }

        private void cmdContas_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {

        }
        private void cmdConfiguracao_ItemClick(object sender, ItemClickEventArgs e)
        {
            loadSplashManager.ShowWaitForm();
            AbreTela(new FormConfigBusiness());
        }
        private void cmdCadUnidades_ItemClick(object sender, ItemClickEventArgs e)
        {
            loadSplashManager.ShowWaitForm();
            AbreTela(new ListUnidade());
        }
        #endregion
        #region Funções extras
        private void BackupSistema()
        {

            backupScreenManager.ShowWaitForm();
            Utils.BackupBaseDados();
            backupScreenManager.CloseWaitForm();
        }
        #endregion
        #region Eventos de abertura de relatórios

        private void cmdRelTitulosPagosNoPeriodo_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            AbreRelatorio(new RelTituloPagoPeriodo());
        }

        private void cmdRelTitulosRecebidosNoPeriodo_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            AbreRelatorio(new RelTituloRecebidoPeriodo());
        }

        private void cmdRelTituloApagaReceber_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            AbreRelatorio(new RelTituloAPagarAReceberPeriodo());
        }

        private void cmdRelTituloPagoRecebido_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            AbreRelatorio(new RelTituloPagoRecebidoPeriodo());
        }
        private void cmdRelTituloAPagar_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            AbreRelatorio(new RelTituloAPagar());
        }

        private void cmdRelTituloAPagaNoPeriodo_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            AbreRelatorio(new RelTituloAPagarPorPeriodo());
        }

        private void cmdRelAPagarVencidos_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            AbreRelatorio(new RelTituloAPagarVencido());
        }

        private void cmdRelTituloAReceber_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            AbreRelatorio(new RelTituloAReceber());
        }

        private void cmdRelAReceberNoPeriodo_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            AbreRelatorio(new RelTituloAReceberPeriodo());
        }

        private void cmdRelAReceberVencidos_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            AbreRelatorio(new RelTituloAReceberVencido());
        }
        #endregion

        private void rbgiSkins_ItemClick(object sender, ItemClickEventArgs e)
        {
            Properties.Settings.Default.SkinName = UserLookAndFeel.Default.SkinName;
            Properties.Settings.Default.Save();
        }

        private void cmdCadFormaPagamento_ItemClick(object sender, ItemClickEventArgs e)
        {
            loadSplashManager.ShowWaitForm();
            AbreTela(new ListFormaPagamento());
        }

        private void cmdCondicoesPagamento_ItemClick(object sender, ItemClickEventArgs e)
        {
            loadSplashManager.ShowWaitForm();
            AbreTela(new ListCondicaoPagamento());
        }

        private void cmdNotasAoConsumidor_ItemClick(object sender, ItemClickEventArgs e)
        {
            loadSplashManager.ShowWaitForm();
            AbreTela(new ListNotaFiscalSaida());
        }

        private void cmdRelNotaFiscalAoConsumidor_ItemClick(object sender, ItemClickEventArgs e)
        {

        }

        private void cmdRelPedidosPorPeriodo_ItemClick(object sender, ItemClickEventArgs e)
        {
            AbreRelatorio(new RelPedidoResumidoPorPeriodo());
        }

        private void cmdRelPedidoDetalhadoPeriodo_ItemClick(object sender, ItemClickEventArgs e)
        {
            AbreRelatorio(new RelPedidoMerceariaDetalhadoPorPeriodo());
        }

        private void cmdRelNotaFiscalSaidaPeriodoEmissao_ItemClick(object sender, ItemClickEventArgs e)
        {
            AbreRelatorio(new RelNotaFiscalSaidaResumidaPeriodoEmissao());
        }

        private void cmdCadNotaFiscalSaida_ItemClick(object sender, ItemClickEventArgs e)
        {
            loadSplashManager.ShowWaitForm();
            AbreTela(new ListNotaFiscalSaida());
        }

        private void cmdLivroCaixa_ItemClick(object sender, ItemClickEventArgs e)
        {
            AbreRelatorio(new RelLancamentoPeriodoLancamento());
        }

        private void cmdRelEntradas_ItemClick(object sender, ItemClickEventArgs e)
        {
            AbreRelatorio(new RelPeriodoLancamentoEntradas());
        }

        private void cmdFuncoesAdministrativas_ItemClick(object sender, ItemClickEventArgs e)
        {
            new FormConfGeral().ShowDialog();
        }

        private void cmdCadUsuario_ItemClick(object sender, ItemClickEventArgs e)
        {
            loadSplashManager.ShowWaitForm();
            AbreTela(new ListUsuario());
        }

        private void ribbonStatusBar1_Click(object sender, EventArgs e)
        {

        }

        private void cmdListaPlanoContaReferencial_ItemClick(object sender, ItemClickEventArgs e)
        {
            loadSplashManager.ShowWaitForm();
            AbreTela(new ListPlanoContaReferencial());
        }

        private void cmdNcm_ItemClick(object sender, ItemClickEventArgs e)
        {
            loadSplashManager.ShowWaitForm();
            AbreTela(new ListNcm());
        }

        private void cmdConfTerminal_ItemClick(object sender, ItemClickEventArgs e)
        {
            loadSplashManager.ShowWaitForm();
            AbreTela(new ListConfTerminal());
        }

        private void cmdEmpresas_ItemClick(object sender, ItemClickEventArgs e)
        {
            loadSplashManager.ShowWaitForm();
            AbreTela(new FormEmpresa());
        }

        private void cmdGerarArquivoNotaGente_ItemClick(object sender, ItemClickEventArgs e)
        {
            loadSplashManager.ShowWaitForm();
            AbreTela(new FormGerarArquivoNotaDaGente());
        }

        private void cmdCadNotasFiscaisEntrada_ItemClick(object sender, ItemClickEventArgs e)
        {
            loadSplashManager.ShowWaitForm();
            AbreTela(new ListNotaFiscalEntrada());
        }

    }
}